In diesem Kapitel werfen wir einen Blick auf Selenium. Selenium ist ein weit verbreitetes Open-Source-Framework, das speziell für die Automatisierung von Webbrowsern entwickelt wurde. Es wird häufig für die Durchführung von Tests von Webanwendungen eingesetzt, um sicherzustellen, dass sie wie erwartet funktionieren. Selenium unterstützt verschiedene Browser und Programmiersprachen, was es zu einem flexiblen und leistungsstarken Werkzeug für Entwickler und Tester macht. Es ermöglicht die Erstellung und Ausführung von Testskripten, die menschliche Interaktionen mit einer Webseite simulieren. Mit Selenium können Benutzer verschiedene Aktionen wie das Klicken auf Schaltflächen, das Ausfüllen von Formularen und das Navigieren durch Seiten automatisieren. Das Framework wurde ursprünglich von Jason Huggins im Jahr 2004 entwickelt und hat sich seitdem zu einem Standardwerkzeug für die Web-Automatisierung entwickelt. Es ist unter der Apache-2-Lizenz frei verfügbar, was seine Verbreitung und Weiterentwicklung in der Open-Source-Community fördert. Selenium wird neben automatisierten Softwaretests von Web-Anwendungen auch insbesondere für die Programmierung von automatischen Webcrawlern eingesetzt. Ein Webcrawler (auch: Spider, Searchbot oder Robot) ist ein Computerprogramm, das automatisch das WWW durchsucht und Webseiten analysiert. Webcrawler werden unter anderem von Suchmaschinen zur Indexierung von Webseiten eingesetzt. Weitere Anwendungen sind das Sammeln von Web-Feeds, E-Mail-Adressen oder von anderen Informationen. Webcrawler sind eine spezielle Art von Bots, also Computerprogrammen, die weitgehend automatisch sich wiederholenden Aufgaben nachgehen. Wie funktioniert so ein Webcrawler? Der Webcrawler besteht aus mehreren Komponenten. Zunächst gibt es den Scheduler, der bestimmt, welche URLs als nächstes besucht werden sollen. Der Scheduler wählt die URLs aus einer Queue (Warteschlange) aus, in der alle zu besuchenden Webseiten gespeichert werden. Diese Queue enthält eine Liste von URLs, die der Crawler in Zukunft besuchen soll. Sobald der Scheduler eine URL ausgewählt hat, wird sie an den Multi-threaded Downloader übergeben. Dieser Downloader ist für das Herunterladen der Webseiten verantwortlich. Da er multi-threaded ist, kann er mehrere Webseiten gleichzeitig herunterladen, was die Effizienz des Crawlers erhöht. Der Downloader holt die Webseiten aus dem World Wide Web und extrahiert von dort Text und Metadaten. Die heruntergeladenen Webseiten, einschließlich ihres Inhalts und ihrer Metadaten, werden anschließend in einem Speicher abgelegt, wo sie für weitere Verarbeitungsschritte oder Analysen zur Verfügung stehen. Die heruntergeladenen Webseiten können auch neue URLs enthalten, die noch nicht in der Queue des Schedulers sind. Diese neuen URLs werden zur Queue hinzugefügt, wodurch der Crawler kontinuierlich neue Webseiten findet und besucht. Aus was besteht Selenium? Der WebDriver ist das Herzstück von Selenium. Er bietet eine plattformunabhängige API, mit der Benutzer Browser steuern können. WebDriver kommuniziert direkt mit dem Browser und bietet eine umfangreiche Kontrolle über die Interaktion mit der Webseite, ohne dass ein Browser-Plugin erforderlich ist. Das Selenium Integrated Development Environment (IDE) ist ein einfaches Werkzeug zur schnellen Erstellung von automatisierten Tests. Es handelt sich um ein Browser-Add-on, das Aktionen aufzeichnet und sie als wiederverwendbare Skripte speichert. Es ist ideal für Benutzer, die keine tiefen Programmierkenntnisse haben und schnell mit der Automatisierung beginnen möchten. Selenium Grid ermöglicht die parallele Ausführung von Tests auf mehreren Maschinen und Browsern gleichzeitig. Es verteilt die Testausführung auf verschiedene Rechner und Browser-Instanzen, wodurch die Gesamtdauer der Testdurchführung erheblich reduziert wird. Dies ist besonders nützlich für umfangreiche Test-Suites, die auf verschiedenen Umgebungen getestet werden müssen. Wie sieht so eine Browser-Engine aus? Links im Diagramm sind verschiedene Programmiersprachen wie Java, C#, Python und andere aufgeführt. Diese Sprachen sind durch sogenannte Language Bindings mit der Selenium WebDriver API verbunden. Die Language Bindings ermöglichen es, die Selenium API in diesen Programmiersprachen zu nutzen, sodass Entwickler Testskripte oder Automatisierungsprozesse in der jeweiligen Sprache schreiben können. Die Selenium WebDriver API bildet das zentrale Element in der Architektur. Diese API dient als Schnittstelle zwischen den Testskripten, die in den oben genannten Programmiersprachen geschrieben wurden, und den Webbrowsern, die gesteuert werden sollen. Rechts im Diagramm sind verschiedene Browser wie Internet Explorer, Chrome, Firefox und andere dargestellt. Zwischen der Selenium WebDriver API und diesen Browsern befinden sich Drivers. Diese Treiber sind für die Kommunikation zwischen der Selenium API und dem jeweiligen Browser verantwortlich. Jeder Browser hat seinen eigenen spezifischen Treiber, der dafür sorgt, dass die Befehle aus den Testskripten korrekt im Browser ausgeführt werden. Die Kommunikation zwischen der Selenium API und den Browser-Treibern erfolgt über das JSON Wire Protocol. Dieses Protokoll ermöglicht es, die Befehle und Rückmeldungen zwischen der API und den Browsern im JSON-Format auszutauschen, was eine standardisierte und effiziente Kommunikation sicherstellt. Diese Folie beschreibt, wie ein einfacher automatisierter Test in Java mithilfe von Selenium WebDriver durchgeführt wird. Zunächst werden die benötigten Selenium-Bibliotheken eingebunden, um mit einem Webbrowser, in diesem Fall Google Chrome, zu interagieren. Im Programm wird dann der Pfad zur ausführbaren Datei des ChromeDrivers festgelegt, die für die Kommunikation zwischen Selenium und dem Chrome-Browser notwendig ist. Anschließend wird eine neue Instanz des Chrome-Browsers gestartet. Der Browser wird angewiesen, eine bestimmte Webseite zu laden. Nachdem die Seite geladen ist, wird der Titel der Webseite ausgelesen und im Konsolenfenster des Programms ausgegeben. Zum Abschluss wird der Browser geschlossen, um die Sitzung zu beenden und alle genutzten Ressourcen freizugeben. Zum Abschluss noch derselbe Code in Python. Zunächst wird die Selenium-Bibliothek importiert, die für die Steuerung des Webbrowsers benötigt wird. Anschließend wird der Pfad zur ausführbaren Datei des ChromeDrivers festgelegt, die notwendig ist, damit Selenium mit dem Chrome-Browser kommunizieren kann. Eine neue Instanz des Chrome-Browsers wird erstellt, und der Browser wird angewiesen, eine bestimmte Webseite zu laden. Nachdem die Seite erfolgreich geladen wurde, wird der Titel der Webseite ausgelesen und auf der Konsole ausgegeben. Zum Abschluss wird der Browser geschlossen, um die Sitzung zu beenden und alle genutzten Ressourcen freizugeben.